import requests
import json


################################################################################
## 这个下面的就是为了能导入上一层目录的脚本的逻辑，为了能让 所有脚本 都调用一个通用脚本认证 ##
################################################################################
import sys
import os

# 获取当前文件所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 获取外层文件夹的路径
parent_dir = os.path.dirname(current_dir)
# 将外层文件夹添加到系统路径中
sys.path.append(parent_dir)

from auth_token import refresh_token
################################################################################


def read_single_line_file(file_path):
    '''
    读取文件的第一行
    '''
    try:
        with open(file_path, 'r') as file:
            line = file.readline().strip()
        return line
    except FileNotFoundError:
        return ""
    except Exception as e:
        return ""


def write_data_to_file(filename, data, fmode):
    """
    将数据写入文件。

    参数:
    filename (str): 文件名。
    data (str): 要写入文件的数据。
    """
    try:
        with open(filename, fmode, encoding='utf-8') as file:
            file.write(str(data) + '\n')
        print(f"数据已成功写入文件: {filename}")
    except IOError as e:
        print(f"写入文件时发生错误: {e}")


def get_first_line(file_path):
    '''
    读取文件的第一行后删除第一行
    就是获取需要删除的文章 article_id
    '''
    try:
        # 读取文件的所有行
        with open(file_path, 'r', encoding='utf-8') as file:
            lines = file.readlines()
        
        # 判断现在文章的数量,并且是否大于56篇，大于56篇。才删除最老的一篇
        if len(lines) > 56:
            # 删除第一行,并且获取第一行数据
            first_line = lines.pop(0)
        
            # 将修改后的内容写回文件
            with open(file_path, 'w', encoding='utf-8') as file:
                file.writelines(lines)
        
            if first_line:
                return first_line
            else:
                return None
        else:
            return None
    except Exception as e:
        print(f"An error occurred: {e}")
        return None


def get_publish_status(new_publish_id):
    '''
    查看文章发布状态
    re = {
        "publish_id":"100000001",
        "publish_status":0,
        "article_id":ARTICLE_ID,
        "article_detail":{
            "count":1,
            "item":[
                {
                    "idx":1,
                    "article_url": ARTICLE_URL
                }
                //如果 count 大于 1，此处会有多篇文章
            ]
        },
        "fail_idx": []
    }
    '''
    url = f"https://api.weixin.qq.com/cgi-bin/freepublish/get?access_token={refresh_token()}"

    # 先获取上一个发布的文章的publish id
    file_path = 'publish_id.txt'
    article_id_file = 'article_id.txt'
    old_publish_id = read_single_line_file(file_path)

    # 优化下面的代码
    write_data_to_file(file_path, new_publish_id, "w")

    if old_publish_id:
        # 组合参数
        data = {
            "publish_id":old_publish_id
        }

        res = requests.post(url=url, json=data)
        res = json.loads(str(res.content, 'utf8'))

        if not res["publish_status"]:
            write_data_to_file(article_id_file, res["article_id"], "a")

    '''
    # 先判断是否有老的publish_id
    if old_publish_id:
        # 有老的publish_id
        # 组合参数
        data = {
            "publish_id":old_publish_id
        }

        res = requests.post(url=url, json=data)
        res = json.loads(str(res.content, 'utf8'))

        if res["publish_status"]:
            # 没有发布成功的文章
            write_data_to_file(file_path, new_publish_id, "w")
        else:
            # 返回的数值是0。这个是发布成功的
            # 那么我们把这个发布成功的 文章的article_id 写入文件
            write_data_to_file(file_path, new_publish_id, "w")
            write_data_to_file(article_id_file, res["article_id"], "a")
    else:
        # 没有老的publish_id
        # 没有的话 就直接把新的写入文件
        write_data_to_file(file_path, new_publish_id, "w")
    '''


def del_old_article():
    '''
    保证一定的文章数量，删除老的文章。
    因为文章实时热搜文章 太多了，而且历史的热搜 对于以后的作用也不大
    所以选择删除老的热搜，并且保证一直历史的 有56篇文章
    '''

    article_id_file = 'article_id.txt'

    # 获取需要删除的文章article_id
    del_article_id = get_first_line(article_id_file)

    # 删除历史的文章
    url = f"https://api.weixin.qq.com/cgi-bin/freepublish/delete?access_token={refresh_token()}"

    if del_article_id:
        # 组合数据
        data = {
            "article_id":del_article_id.strip()
        }

        res = requests.post(url=url, json=data)

        res = json.loads(str(res.content, 'utf8'))

        print("已删除：", del_article_id.strip(), "信息：", res)

